package jobtc;
/*
 * 스무고개 인공지능 게임
 * 날짜 : 14-04
 * 작성자 : pwg
 */


import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JButton;
import javax.swing.JTextField;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Random;

public class BingGo extends JFrame {
	int x=0; // 짝수일 때는 2부터 , 홀수 일때는 1부터 시작
	int quest_cnt=1; // 질문수
	boolean odd = false; // 홀수이면 true
	boolean multiple3 = false; // 3의 배수이면 true;
	
	int max=1000;
	int min = 1;
	int su[] = new int[1000];
	int quest=0;
	int pos = 0;
	int cnt = 0; // 예상수들의 갯수
	
	String[] question= {
			"1자리 숫자 입니까 ?",
			"2자리 숫자 입니까 ?",
			"3자리 숫자 입니까 ?",
			"홀수 입니까 ?",
			"3의 배수입니까 ?",
	};
	
	
	String[] ansYes={
			"귀신인걸~",
			"어찌 알았지 !",
			"내 속마음을 읽는건 반칙입니다.",
			"미치겠네...찍기도 수준급...",
			"천재랑 싸워서 내가 과연 이길 수 있을까 ??? 맞습니다."
	};
	
	String[] ansNo={
			"어림없다는...",
			"틀립니다. 다시 생각해 보세요",
			"삼천포로 향해 가십니다.",
			"아싸~~~, 나의 승리가 코앞. 틀렸습니다.",
			"업 다운을 잘 모르는건 아닌지!!! ",
	};
	
	private JPanel contentPane;
	private JScrollPane scrollPane;
	private JTextArea result;
	private JButton btnUp;
	private JButton btnDown;
	private JButton btnYes;
	private JButton btnNo;
	private JButton btnNewButton_4;
	private JTextField textField;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				try {
					BingGo frame = new BingGo();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public BingGo() {
		setTitle("스무고개");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 393, 693);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		contentPane.add(getScrollPane());
		contentPane.add(getBtnUp());
		contentPane.add(getBtnDown());
		contentPane.add(getBtnYes());
		contentPane.add(getBtnNo());
		contentPane.add(getBtnNewButton_4());
		contentPane.add(getTextField());
		
		btnYes.setEnabled(false);
		btnNo.setEnabled(false);
		btnUp.setEnabled(false);
		btnDown.setEnabled(false);
		
	}
	
	public void gameStop(){
		addMessage(quest_cnt + " 번째 정답을 맞추었네요...");
		addMessage("게임을 다시 하려면 Game Start버튼을 클릭하세요");
		btnYes.setEnabled(false);
		btnNo.setEnabled(false);
		btnUp.setEnabled(false);
		btnDown.setEnabled(false);
	}
	public void start(){
		x=0; // 짝수일 때는 2부터 , 홀수 일때는 1부터 시작
		quest_cnt=1; // 예상수들의 갯수
		odd = false; // 홀수이면 true
		multiple3 = false; // 3의 배수이면 true;
		quest=0;
		max=1000;
		min = 1;
		quest=0;
		
		
		// 홀수인가를 물음.
		addMessage("지금 부터 컴퓨터와의 두뇌 싸움을 싸우겠습니다. \n");
		addMessage("먼저 YES/NO 유형의 질문을 드립니다. 정확히 답해 주세요. !!!\n");
		addMessage(quest_cnt + " 회 Com 질문 : " + question[quest]);
		
		btnUp.setEnabled(false);
		btnDown.setEnabled(false);
	
		btnYes.setEnabled(true);
		btnNo.setEnabled(true);
	}
	
	public void addMessage(String s){
		result.append(s);
		result.append("\n");
		
	}
	
	public void check(boolean b){
		quest_cnt++;
		int pos = new Random().nextInt(ansYes.length);
		
		if(quest==0){// 1자리수
			if(b){
				min=1;
				max=9;
				quest=3;
			}else{
				quest=1;
			}
			addMessage(quest_cnt + " 회 Com 질문 : " + question[quest]);
			//addMessage("ME : "+ ansYes[pos]);
			//addMessage("\n");
		}else if(quest==1){//2자리수
			if(b){
				min=10;
				max=99;
				quest=3;
			}else{
				quest = 2;
			}
			addMessage(quest_cnt + " 회 Com 질문 : " + question[quest]);
			//addMessage("ME : "+ ansYes[pos]);
			//addMessage("\n");
		}else if(quest==2){ //3자리
			if(b){
				min=100;
				max=999;
				quest=3;
				addMessage(quest_cnt + " 회 Com 질문 : " + question[quest]);
			}else{
				addMessage("정답은 1000 이로군 ㅋㅋㅋㅋ");
				quest = -1;
				gameStop();
				return;
			}

		}else{
			check2(b);
		}
		

		
	}
	
	public void check2(boolean b){
		if(quest==3){//홀수인가?
			odd=b;
			quest=4;
			//addMessage("ME : " + ansYes[pos]);
			//addMessage("\n");
		}else if(quest==4){ // 3의 배수인가 ?
			multiple3 = b;
			//addMessage("ME : "+ ansYes[pos]);
			//addMessage("\n");
			quest=99;
		}
		
		if(quest == 99){
			btnYes.setEnabled(false);
			btnNo.setEnabled(false);
			
			btnUp.setEnabled(true);
			btnDown.setEnabled(true);
			
			binaryCheck();
		}else{
		
			addMessage(quest_cnt + " 회 Com 질문 : " + question[quest]);
		}
	}
	
	public void binaryCheck(){
		int k=2;
		boolean flag=false;
		cnt = 0;
		
		
		if(odd){
			min=(min%2==1)? min: min+1;
		}
		
		
		for(int i=min ; i<=max ; i=i+2){
		
			if(multiple3){
				flag = (i%3==0)? true:false;
				if(flag){
					su[cnt] = i;
					cnt++;
				}
			}else{
				su[cnt] = i;
				cnt++;
			}
		}
		
		
		String str = String.format("%d 회 Com 질문 : %d~%d까지 수중 하나임...", quest_cnt, min, max);

		System.out.println();
		for(int i=0 ; i<cnt ; i++) System.out.print(su[i] + " ");
		System.out.println();
		addMessage(str );

	}
	
	
	private JScrollPane getScrollPane() {
		if (scrollPane == null) {
			scrollPane = new JScrollPane();
			scrollPane.setBounds(12, 10, 360, 388);
			scrollPane.setViewportView(getResult());
		}
		return scrollPane;
	}
	private JTextArea getResult() {
		if (result == null) {
			result = new JTextArea();
		}
		return result;
	}
	private JButton getBtnUp() {
		if (btnUp == null) {
			btnUp = new JButton("UP");
			btnUp.setBounds(12, 408, 79, 68);
		}
		return btnUp;
	}
	private JButton getBtnDown() {
		if (btnDown == null) {
			btnDown = new JButton("DOWN");
			btnDown.setBounds(93, 408, 82, 68);
		}
		return btnDown;
	}
	private JButton getBtnYes() {
		if (btnYes == null) {
			btnYes = new JButton("YES");
			btnYes.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					check(true);
				}
			});
			btnYes.setBounds(224, 408, 69, 68);
		}
		return btnYes;
	}
	private JButton getBtnNo() {
		if (btnNo == null) {
			btnNo = new JButton("NO");
			btnNo.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					check(false);
				}
			});
			btnNo.setBounds(293, 408, 79, 68);
		}
		return btnNo;
	}
	private JButton getBtnNewButton_4() {
		if (btnNewButton_4 == null) {
			btnNewButton_4 = new JButton("Game Start");
			btnNewButton_4.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent arg0) {
					start();
				}
			});
			btnNewButton_4.setBounds(182, 485, 190, 160);
		}
		return btnNewButton_4;
	}
	private JTextField getTextField() {
		if (textField == null) {
			textField = new JTextField();
			textField.setBounds(12, 486, 163, 159);
			textField.setColumns(10);
		}
		return textField;
	}
}
